Cloud computing systems have become an increasingly common aspect of computing technology. Cloud computing systems rely on networked computing resources to give a user a particular level of service. Generally, this service may be categorised as one of three types:                Infrastructure as a service (IaaS)—provides the use of the hardware within the cloud computing system for a user—for example, job processing, virtual machines or storage.        Platform as a service (PaaS)—provides the use of a computing platform on a cloud computing service for a user—for example, job processing or software development.        Software as a service (SaaS)—provides software that is hosted on a cloud computing service to a user—for example, email or business applications.        
Such cloud computing systems may be private or public or a hybrid of both.
One particular advantage of cloud computing systems is that due to the number of central processing units/compute nodes networked together in the system, complex and time consuming computations can be carried out quickly. In this way large jobs may be computed while saving the user time and money. For users who cannot afford to maintain a cloud computing system for their private use, there is the alternative option of using a public cloud computing system as and when the need arises. Typically, this may be provided by a cloud computing service provider to the user at either an IaaS or PaaS level. In this situation, the cloud computing service provider may give the user access to the resources on the cloud computing system.
One problem with this solution is that the user needs to enable the application so that it can run on the cloud computing system in order to compute the particular jobs that the user needs the cloud computing system to compute. This can require adapting the computer application (with which the job is associated) so that it can be executed on the particular cloud computing system. The user will also need to manage the running of the application on the cloud computing system. This can be costly and time-consuming, especially for developers of applications not familiar with the framework of the cloud computing system. It may also limit the options for the cloud computing system available to a user to compute their jobs (for example, the adapted application may be limited to a specific platform). Alternatively, the job may need to be adapted to suit the systems/applications already provided by the cloud computing service providers. Again, this can be costly, time-consuming and limited to specific types of cloud computing systems. The other challenge relates to scaling out many compute nodes to work jointly on a particular job. This requires significant development effort to provision and manage the compute resources in a cloud computing system.
Another problem with such systems is that jobs submitted to a cloud computing system for computing may be dependent on complex and/or bulky data files. For example, a rendering job may be reliant on a large library of texture files or similar. So that a job computes correctly, these file dependencies need to be readily available to the compute node that is computing the job. This may require programmatically ascertaining which data files a job may need in advance of the job being computed, and loading only those that are needed onto the compute node. This can be difficult and time-consuming. Alternatively, all of the data files may be loaded on the compute node, but where the set of all user data files are large this can take up a significant amount of time, which is also costly and time-consuming. In many cases, the entire set of user data files may not fit on an individual compute node's local storage.
It is an object of the present invention to provide a method for enabling an application to run on a cloud computing system and for deploying the application to the cloud computing system, which alleviates some of the problems described above. That is to say, a method that is less complex and is portable to multiple cloud computing systems. It is also object to provide a method of computing a job on a cloud computing system that is less complex and portable.
It is a further object of the present invention to provide a method for computing a job on a cloud computing system that is not burdened by having to download complex and/or bulky data files.
Each object is to be read disjunctively with the object of at least providing the public with a useful choice.